/* 输出下面代码运行结果 */
// example 1 

var a = {},
    b = '123',
    c = 123;
a[b] = 'b';
a[c] = 'c';
console.log(a[b]); //=>c
// => c 因为: 1.对象里面的属性开头数字必须用[]括起来。2.对象里面的属性如果是数字的话字符串类型和数字类型都会在对象的属性中转化为字符串 a[123] <=> a['123]

// example 2 
var a = {},
    b = Symbol('123')
    c = Symbol('123');
a[b] = 'b';
a[c] = 'c';
console.log(a[b]); //=> b
//=> Symbol是ES6中新增的数据类型 typeof Symbol('123') === "Symbol" 
//=> 它创建出来的值是唯一值  Symbol('123') === Symbol('123') // false

// example 3
var a = {},
    b = {key:'123'},
    c = {key:'456'};
a[b] = 'b';
a[c] = 'c';
console.log(a[b]); //=>c
/* 
  1. 对象的属性名不能是一个对象(遇到对象属性名,会默认转换为字符串)
  obj = {} arr = [12,23] obj[arr] = '珠峰' obj=>{"12,23":"珠峰"}
  2.普通对象.toString() 调取的是Objcet.prototype上的方法(这个方法是用来检测数据类型的)
  obj = {} obj.toString() => "[object Object]"
  obj = {}; a = {key:'123'} b = {key:'234'};
  obj[a] = 'a'; obj[b] = 'b'; a和b都是对象,相当于 obj{"[object Object]":'a'}  obj{"[object Object]":'b'}
  3.当对象的属性名是一个数组时,则会调用数组原型上的toString方法,数组转化为字符串,只不过数组的toString与对象的不同,会转化为字符串,字符串的值是原数组每个值
  用逗号隔开的字符串
*/
